1、ResultBack
public class ResultBack {
private static final String TAG = "ACTIVITYRESULTBACK";
private ResultBackFragment mResultBackFragment;
public ResultBack(Fragment fragment) {
this(fragment.getActivity());
}
public ResultBack(Activity activity) {
mResultBackFragment = getResultBackFragment(activity);
}
private ResultBackFragment getResultBackFragment(Activity activity) {
ResultBackFragment resultBackFragment = findResultBackFragment(activity);
if (resultBackFragment == null) {
resultBackFragment = new ResultBackFragment();
FragmentManager fragmentManager = activity.getFragmentManager();
fragmentManager.beginTransaction().add(resultBackFragment, TAG).commitAllowingStateLoss();
fragmentManager.executePendingTransactions();
}
return resultBackFragment;
}
private ResultBackFragment findResultBackFragment(Activity activity) {
return (ResultBackFragment) activity.getFragmentManager().findFragmentByTag(TAG);
}
public void startForResult(Class<?> clazz, Callback callback) {
Intent intent = new Intent(mResultBackFragment.getActivity(), clazz);
startForResult(intent, callback);
}
public void startForResult(Intent intent, Callback callback) {
mResultBackFragment.startForResult(intent, callback);
}
public interface Callback {
void onActivityResult(int resultCode, Intent data);
}
}
2、ResultBackFragment
public class ResultBackFragment extends Fragment {
private Map<Integer, ResultBack.Callback> mCallbacks = new HashMap<>();
public ResultBackFragment() {
}
public void startForResult(Intent intent, ResultBack.Callback callback) {
mCallbacks.put(callback.hashCode(), callback);
startActivityForResult(intent, callback.hashCode());
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//callback方式的处理
ResultBack.Callback callback = mCallbacks.remove(requestCode);
if (callback != null) {
callback.onActivityResult(resultCode, data);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
}
3、使用
a、携带数据
Intent it = new Intent(getFragmentActivity(), ExternalActivity.class);
it.putExtra("test", "test_123456789");
new ResultBack(getFragmentActivity()).startForResult(it, new ResultBack.Callback() {
@Override
public void onActivityResult(int resultCode, Intent data) {
if (resultCode == RESULT_OK && data != null) {
String result = data.getStringExtra("back");
LogUtils.e("result:" + result);
ToastUtils.info(result);
}
}
});
返回处理
String value = getIntent().getStringExtra("test");
Intent it = new Intent();
it.putExtra("back", "final:" + value);
setResult(RESULT_OK, it);
finish();
b、不携带数据
new ResultBack(getFragmentActivity()).startForResult(ExternalActivity.class, new ResultBack.Callback() {
@Override
public void onActivityResult(int resultCode, Intent data) {
if (resultCode == RESULT_OK && data != null) {
String result = data.getStringExtra("back");
LogUtils.e("result:" + result);
ToastUtils.info(result);
}
}
});
返回数据处理
Intent it = new Intent();
it.putExtra("back", "final:Hello World");
setResult(RESULT_OK, it);
finish();
总结
使用fragment映射实现activity生命周期,对于返回result集中处理,不必要分离了,视觉上更容易业务流程!